It is becoming increasingly practical to build computing platforms based on a set of microprocessors distributed as nodes in a loosely coupled multiprocessor system. In one approach, system memory is distributed among the nodes and directly accessible only by the processor or processors on that node.
Applications for such systems are difficult to develop. In order to use the computing power of two or more nodes, the applications must be capable of being executed as processes distributed across the nodes. Data acted on by these processes must be stored in such a way that processes operating on other nodes can access that data.
Distributed shared memory systems have been described which map physical memory on each of the nodes to a global virtual memory space. Distributed Shared Memory (DSM) runtime systems, for instance, transparently intercept user accesses to remote memory and translate those accesses into messages appropriate to the underlying communication media. The programmer is thus given the illusion of a large global address space encompassing all available memory, eliminating the task of explicitly moving data between processes located on separate machines. William E. Speight and John K. Bennett describe such systems in Brazos: A Third Generation DSM System, published August 1997 in Proceedings of the 1997 USENIX Windows/NT Workshop, the description of which is incorporated herein by reference.
Such an approach can be difficult to implement and inflexible, especially when applied across a heterogeneous group of nodes. DSM systems are usually implemented through memory management unit (MMU) semantics, with the shared virtual address range implemented through MMU mappings. The runtime system coordinates accesses to shared data and keeps shared data consistent across nodes by managing the mappings to the shared virtual address range.
Because of the MMU support, however, the size of data being shared is limited by the granularity of the page size, as well as by the cache policy. There are two drawbacks of these limitations: false sharing and lack of flexibility in assigning coherency semantics to data from different applications that falls within the same page.
Another approach to sharing data within distributed computing systems is to treat memory on each node as independent memory space, and use message passing to share data. In one such approach, the system defines a data item and assigns to that data item a name that is unique across the system. Subsequent references to that data item result in explicit message passing between nodes to obtain the latest instance of the data item. Such an approach can lead to excessive communication costs; messages are sent to all parties involved in sharing the data item for every reference to data within that data item.
What is needed is a system and method for sharing global data within distributed computing systems that addresses the issues raised above and others that will become apparent in reading the following description of the present invention.